package gui; import java.awt.*; import java.awt.event.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.swing.*; import queues.Scheduler; public class Gui { private JFrame frame = new JFrame(); private JPanel labelPanel = new JPanel(new GridLayout(5, 1, 30, 30)); private JPanel inputPanel = new JPanel(new GridLayout(1, 2, 30, 30)); private JPanel textPanel = new JPanel(new GridLayout(5, 1, 30, 30)); private JPanel simulationPanel = new JPanel(new GridLayout(1, 3, 50, 50)); private static JPanel[] server = new JPanel[3]; private JPanel infoPanel = new JPanel(new BorderLayout()); private JPanel btnPanel = new JPanel(new GridLayout(1, 2, 30, 30)); private JLabel minArr = new JLabel("Min arriving time"); private JLabel maxArr = new JLabel("Max arriving time"); private JLabel minServ = new JLabel("Min service time"); private JLabel maxServ = new JLabel("Max service time"); private JLabel sim = new JLabel("Simulation time"); private JLabel elapsedTime = new JLabel("0"); private static JTextField minArrText = new JTextField(); private static JTextField maxArrText = new JTextField(); private static JTextField minServText = new JTextField(); private static JTextField maxServText = new JTextField(); private static JTextField simText = new JTextField(); private static JTextArea infoText = new JTextArea(); private JScrollPane scroll = new JScrollPane(infoText); private JLabel srv1 = new JLabel("Server1"); private JLabel srv2 = new JLabel("Server2"); private JLabel srv3 = new JLabel("Server3"); private JButton start = new JButton("Start simulation"); private int time = 0; private Runnable increaseTime = new Runnable() { public void run() { elapsedTime.setText("Elapsed time: " + time + " seconds"); time++; } }; ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); private SwingWorker<Integer, Void> worker = new SwingWorker<Integer, Void>() { public Integer doInBackground() { new Scheduler(); return 1; } }; public Gui() { server[0] = new JPanel(new GridLayout(7, 1, 20, 20)); server[1] = new JPanel(new GridLayout(7, 1, 20, 20)); server[2] = new JPanel(new GridLayout(7, 1, 20, 20)); frame.setLayout(new BorderLayout()); labelPanel.add(minArr); labelPanel.add(maxArr); labelPanel.add(minServ); labelPanel.add(maxServ); labelPanel.add(sim); inputPanel.add(labelPanel); textPanel.add(minArrText); textPanel.add(maxArrText); textPanel.add(minServText); textPanel.add(maxServText); textPanel.add(simText); inputPanel.add(textPanel); frame.add(inputPanel, BorderLayout.NORTH); infoPanel.add(scroll, BorderLayout.CENTER); infoPanel.add(elapsedTime, BorderLayout.SOUTH); frame.add(infoPanel, BorderLayout.CENTER); btnPanel.add(start); frame.add(btnPanel, BorderLayout.SOUTH); server[0].add(srv1); server[1].add(srv2); server[2].add(srv3); simulationPanel.add(server[0]); simulationPanel.add(server[1]); simulationPanel.add(server[2]); frame.add(simulationPanel, BorderLayout.EAST); start.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { executor.scheduleAtFixedRate(increaseTime, 0, 1, TimeUnit.SECONDS); worker.execute(); } }); frame.setSize(800, 800); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void addToServer(int index, int i) { JLabel lbl = new JLabel("CLIENT " + i); lbl.setForeground(new Color((int) (Math.random() * 0x1000000))); server[index].add(lbl); } public static void removeFromServer(int index) { server[index].remove(1); } public static int getMinArrTime() { int x = Integer.parseInt(minArrText.getText()); return x; } public static int getMaxArrTime() { int x = Integer.parseInt(maxArrText.getText()); return x; } public static int getMinServTime() { int x = Integer.parseInt(minServText.getText()); return x; } public static int getMaxServTime() { int x = Integer.parseInt(maxServText.getText()); return x; } public static int getSimulationTime() { int x = Integer.parseInt(simText.getText()); return x; } public static void showMessage(String s) { System.out.println(s + "\n"); infoText.append(s + "\n"); infoText.setCaretPosition(infoText.getDocument().getLength()); } }